package com.example.spring_mybatis.utils;


import java.util.HashMap;
import java.util.Map;

/**
 * 定义数据返回包装类
 *
 * @param <T>
 */
public class RUtil<T> extends HashMap<String, Object> {
    public RUtil() {
        put("code", 0);
        put("message", "成功");
    }

    public static RUtil error() {
        return error(1, "未知错误");
    }

    public static RUtil error(String message) {
        return error(1, message);
    }

    public static RUtil error(int code, String message) {
        RUtil rUtil = new RUtil();
        rUtil.put("code", code);
        rUtil.put("message", message);
        return rUtil;
    }

    public static RUtil error(String message, String method, String url) {
        RUtil rUtil = new RUtil();
        rUtil.put("code", 1);
        rUtil.put("message", message);
        rUtil.put("method", method);
        rUtil.put("url", url);
        return rUtil;
    }

    public static RUtil error(int code, String message, String method, String url) {
        RUtil rUtil = new RUtil();
        rUtil.put("code", code);
        rUtil.put("message", message);
        rUtil.put("method", method);
        rUtil.put("url", url);
        return rUtil;
    }

    public static RUtil success() {
        return new RUtil();
    }

    public static RUtil success(String message) {
        RUtil rUtil = new RUtil();
        rUtil.put("message", message);
        return rUtil;
    }

    public static RUtil success(Map<String, Object> map) {
        RUtil rUtil = new RUtil();
        rUtil.put("result", map);
        return rUtil;
    }

    public static <T> RUtil<T> success(T data) {
        RUtil rUtil = new RUtil();
        rUtil.put("result", data);
        return rUtil;
    }

    public static <T> RUtil<T> success(T data, String message) {
        RUtil rUtil = new RUtil();
        rUtil.put("message", message);
        rUtil.put("result", data);
        return rUtil;
    }

    public static <T> RUtil<T> success(T data, String message, Integer code) {
        RUtil rUtil = new RUtil();
        rUtil.put("code", code);
        rUtil.put("message", message);
        rUtil.put("result", data);
        return rUtil;
    }

    public RUtil put(String key, Object value) {
        super.put(key, value);
        return this;
    }
}
